前言
这里是课程笔记。
这门课是偏实践的。
事实上,Lingo非常简单。
基本界面与解方程
Lingo
基本界面
(点击Solve
,结果将在Solution Report
中给出)
用Lingo
解方程
(每个方程都应当以;
结尾)
Lingo
变量
Lingo
默认所有变量为大于等于0
的数字- 使用
@free
函数使变量定义域为R
Lingo
变量名不区分大小写Lingo
变量名由字母、数字、下划线组成,且以字母开头
线性规划基础
- 一个线性规划中只含一个目标函数
- 求目标函数的最大值或最小值分别用
max=...
或min=...
来表示 - 注释语句以
!
开头,以;
结尾 - 非线性规划基本得不到全局最优解
集合与矩阵
生产一维矩阵
1 | sets: |
a
、b
为1×6
矩阵,x
、y
为1×3
矩阵factory
和plant
都是制造矩阵的“工厂”,但它们是两家不同的工厂factory
工厂后面的/1..6/
说明它专门生产1×6
的矩阵factory
、a
、b
都是任意取的变量名a
、b
由factory
产生后,与factory
再无关联Lingo
通过sets:
和endsets
表示创建矩阵的起止
矩阵的赋值
Lingo
通过data:
和enddata
表示矩阵赋值的起止,即赋值语句写在两者之间- 待求解的矩阵不用赋值
- 需要赋值的矩阵必须对每个元素都赋值
循环与求和
@for( gc(i) : a(i)*x(i)=S )
,其中gc
生产1×5
的矩阵,表示循环次数,即a(1)*x(1)=S, ..., a(5)*x(5)=S
@sum( gc(i) : x(i) ) = 5000
,其中gc
生产1×5
的矩阵,表示循环次数,即x(1) + ... + x(5) = 5000
(整个程序以model:
开头,以end
结尾)
工厂合并
1 | sets: |
c
为6×3
矩阵Cooperation
是任意取的变量名
运算符与内置函数
运算符
关系运算符
Lingo
只有三种关系运算符:=
、>=
、<=
(>
和<
视作>=
和<=
)
若想严格表达A
大于B
,可以用以下方式
1 | B = 10; |
逻辑运算符
逻辑运算符仅出现于for
循环、sum
求和、if
判断